humanize
以往的經驗都在開發 Restful 服務,對 GraphQL 的議題並不熟悉。有鑒於 Restful 為人所知的效能問題,前端的資料結構被後端 API 侷限,因而花費更多請求來取得相同的資訊。這些都是促使我想嘗試 GraphQL 的理由。
這邊主要選擇個人熟悉或社群常用的框架。
npm i -g @nestjs/cli
nest new --strict humanize-api
npm i @nestjs/graphql @nestjs/apollo @apollo/server graphql
用於計算星盤的函式庫。內建資料可計算 3000 BC 至 3000 AD,精準度 0.1 弧秒。若下載 JPL 資料集(約 2.9 GB),可計算 13000 BC 至 17000 AD,精準度小於 0.001 弧秒。
npm i swisseph
目標設計為微服務,因此預先選用 CQRS 讀寫分離的模式,並搭配 Sega 模式設計非同步業務邏輯,以確保最終一致性。
npm install --save @nestjs/cqrs
毫無懸念。
特別加上 simple import sort 是因為受不了雜亂無章參差不齊的 import 語句。
除了使用 NestJS 預設 strict 模式的語法檢查之外,另外還調整了一些規則:
interface
命名須以大寫 I 開頭'@typescript-eslint/naming-convention': [
'error',
{
selector: 'interface',
format: ['PascalCase'],
custom: {
regex: '^I[A-Z]',
match: true,
},
},
],
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/explicit-module-boundary-types': 'error',
any
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/explicit-member-accessibility': 'error',
return
throw
continue
break
語句的上一行須為空白行'padding-line-between-statements': [
'error',
{ blankLine: 'always', prev: '*', next: 'return' },
{ blankLine: 'always', prev: '*', next: 'throw' },
{ blankLine: 'always', prev: '*', next: 'continue' },
{ blankLine: 'always', prev: '*', next: 'break' },
],
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
'max-len': ['error', { code: 80 }],
semantic-release
搭配自己寫的 semantic-release-gitmoji
晚安,瑪卡巴卡。